package com.company.cloud.behavior.modules.api.service;

import com.company.cloud.behavior.modules.api.fallback.BehaviorClientServiceFallbackFactory;
import com.company.cloud.behavior.modules.api.response.*;
import com.company.cloud.common.bean.BaseClientResult;
import com.company.common.server.constant.ServiceNameConstant;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;


@FeignClient(contextId = "behavior", name = ServiceNameConstant.basic_center, fallbackFactory = BehaviorClientServiceFallbackFactory.class)
public interface BehaviorClientService {

    //---------------------

    /**
     * 获取对象的收藏情况(单个)
     */
    @RequestMapping(value = "/remote/behavior/collection/collectionInfo", method = RequestMethod.POST)
    public BaseClientResult<CollectionSearchModel> getCollectionInfo(@RequestBody BehaviorSearchParam param);

    /**
     * 获取对象的收藏情况(列表)
     */
    @RequestMapping(value = "/remote/behavior/collection/collectionList", method = RequestMethod.POST)
    public BaseClientResult<List<CollectionSearchModel>> getCollectionList(@RequestBody BehaviorSearchListParam param);

    //---------------------

    /**
     * 获取对象的评论数（单个）
     */
    @RequestMapping(value = "/remote/behavior/collection/commentInfo", method = RequestMethod.POST)
    public BaseClientResult<Integer> getCommentInfo(@RequestBody BehaviorSearchParam param);

    /**
     * 获取对象的评论数（单个,包含点赞用户头像等信息)
     */
    @RequestMapping(value = "/remote/behavior/collection/commentUserInfo", method = RequestMethod.POST)
    public BaseClientResult<CommentSearchModel> getCommentUserInfo(@RequestBody BehaviorSearchParam param);

    /**
     * 获取对象的评论数(列表)
     */
    @RequestMapping(value = "/remote/behavior/collection/commentList", method = RequestMethod.POST)
    public BaseClientResult<List<Integer>> getCommentList(@RequestBody BehaviorSearchListParam param);

    //---------------------

    /**
     * 获取对象的关注情况(单个)
     */
    @RequestMapping(value = "/remote/behavior/collection/followInfo", method = RequestMethod.POST)
    public BaseClientResult<FollowSearchModel> getFollowInfo(@RequestBody BehaviorSearchParam param);

    /**
     * 获取对象的关注情况(列表)
     */
    @RequestMapping(value = "/remote/remote/behavior/collection/followList", method = RequestMethod.POST)
    public BaseClientResult<List<FollowSearchModel>> getFollowList(@RequestBody BehaviorSearchListParam param);

    /**
     * 获取对象的关注情况(Map)
     */
    @RequestMapping(value = "/remote/remote/behavior/collection/followMap", method = RequestMethod.POST)
    public BaseClientResult<Map<String, FollowSearchModel>> getFollowMap(@RequestBody BehaviorSearchListParam param);


    //---------------------

    /**
     * 获取对象的点赞情况(单个)
     */
    @RequestMapping(value = "/remote/behavior/collection/thumbsUpInfo", method = RequestMethod.POST)
    public BaseClientResult<ThumbsUpSearchModel> getThumbsUpInfo(@RequestBody BehaviorSearchParam param);

    /**
     * 获取对象的点赞情况(单个,包含点赞用户头像等信息)
     */
    @RequestMapping(value = "/remote/behavior/collection/thumbsUpUserInfo", method = RequestMethod.POST)
    public BaseClientResult<ThumbsUpSearchModel> getThumbsUpUserInfo(@RequestBody BehaviorSearchParam param);

    /**
     * 获取对象的点赞情况(列表)
     */
    @RequestMapping(value = "/remote/behavior/collection/thumbsUpList", method = RequestMethod.POST)
    public BaseClientResult<List<ThumbsUpSearchModel>> getThumbsUpList(@RequestBody BehaviorSearchListParam param);

    /**
     * 获取多个对象的点赞情况(列表)
     */
    @RequestMapping(value = "/remote/behavior/collection/thumbsUpMap", method = RequestMethod.POST)
    public BaseClientResult<Map<String, ThumbsUpSearchModel>> thumbsUpMap(@RequestBody BehaviorSearchListParam param);


    //---------------------

    /**
     * 获取对象的评分(单个)
     */
    @RequestMapping(value = "/remote/behavior/collection/scoreAvgInfo", method = RequestMethod.POST)
    public BaseClientResult<BigDecimal> getScoreAvgInfo(@RequestBody BehaviorSearchParam param);

    /**
     * 获取对象的评分情况(列表)
     */
    @RequestMapping(value = "/remote/behavior/collection/scoreAvgMap", method = RequestMethod.POST)
    public BaseClientResult<Map<String, BigDecimal>> getScoreAvgList(@RequestBody BehaviorSearchListParam param);

    /**
     * 获取对象的评分情况(详细)
     */
    @RequestMapping(value = "/remote/behavior/collection/userScore", method = RequestMethod.POST)
    public BaseClientResult<UserScoreSearchModel> getUserScoreSearchModel(@RequestBody BehaviorSearchParam param);

    //---------------------

    /**
     * 获取对象的全部Behavior情况(单个)
     */
    @RequestMapping(value = "/remote/behavior/collection/behaviorInfo", method = RequestMethod.POST)
    public BaseClientResult<BehaviorSearchAllModel> getBehaviorInfo(@RequestBody BehaviorSearchAllParam param);

    /**
     * 获取对象的全部Behavior情况(列表)
     */
    @RequestMapping(value = "/remote/behavior/collection/behaviorList", method = RequestMethod.POST)
    public BaseClientResult<List<BehaviorSearchAllModel>> getBehaviorList(@RequestBody BehaviorSearchListAllParam param);

    /**
     * 获取对象的全部Behavior情况(map)
     */
    @RequestMapping(value = "/remote/behavior/collection/behaviorMap", method = RequestMethod.POST)
    public BaseClientResult<Map<String, BehaviorSearchAllModel>> getBehaviorMap(@RequestBody BehaviorSearchListAllParam param);

}
